<template>
  <view>
    <!-- 状态栏 -->
    <view
      v-if="showHeader"
      :style="{ position: headerPosition, top: statusTop, opacity: afterHeaderOpacity }"
      class="status"
    ></view>
    <!-- 顶部导航栏 -->
    <view
      v-if="showHeader"
      :style="{ position: headerPosition, top: headerTop, opacity: afterHeaderOpacity }"
      class="header"
    >
      <!-- 定位城市 -->
      <view class="addr">
        <view class="icon location"></view>
        {{ city }}
      </view>
      <!-- 搜索框 -->
      <view class="input-box">
        <input placeholder="默认关键字" placeholder-style="color:#c0c0c0;" @tap="toSearch()" />
        <view class="icon search"></view>
      </view>
      <!-- 右侧图标按钮 -->
      <view class="icon-btn">
        <view class="icon yuyin-home"></view>
        <view class="icon tongzhi" @tap="toMsg"></view>
      </view>
    </view>
    <!-- 占位 -->
    <view v-if="showHeader" class="place"></view>
    <!-- 轮播图 -->
    <view class="swiper">
      <view class="swiper-box">
        <u-swiper
          :list="swiperList"
          circular
          height="320rpx"
          indicator
          indicatorMode="line"
          keyName="image"
          width="100%"
          @change="swiperChange"
        />
      </view>
    </view>
    <!-- 分类列表 -->
    <view class="category-list">
      <view v-for="(row, index) in categoryList" :key="index" class="category" @tap="toCategory(row)">
        <view class="img">
          <image :src="row.img"></image>
        </view>
        <view class="text">{{ row.name }}</view>
      </view>
    </view>

    <!-- 商品列表 -->
    <view class="goods-list">
      <view class="title">
        <image src="/static/image/hua.png"></image>
        猜你喜欢
        <image src="/static/image/hua.png"></image>
      </view>
      <view class="waterfall">
        <uv-waterfall
          ref="waterfall"
          v-model="list"
          :add-time="10"
          :column-gap="columnGap"
          :left-gap="leftGap"
          :right-gap="rightGap"
          @changeList="changeList"
        >
          <!-- 第一列数据 -->
          <template v-slot:list1>
            <!-- 为了磨平部分平台的BUG，必须套一层view -->
            <view>
              <view v-for="item in list1" :key="item.id" class="waterfall-item" @tap="toGoods">
                <view :style="[imageStyle(item)]" class="waterfall-item__image">
                  <image :src="item.image" :style="{ width: item.width + 'px' }" mode="widthFix"></image>
                </view>
                <view class="waterfall-item__ft">
                  <view class="waterfall-item__ft__title">
                    <text class="value">{{ item.title }}</text>
                  </view>
                  <view class="waterfall-item__ft__desc uv-line-2">
                    <text class="value">{{ item.desc }}</text>
                  </view>
                </view>
              </view>
            </view>
          </template>
          <!-- 第二列数据 -->
          <template v-slot:list2>
            <!-- 为了磨平部分平台的BUG，必须套一层view -->
            <view>
              <view v-for="item in list2" :key="item.id" class="waterfall-item" @tap="toGoods">
                <view :style="[imageStyle(item)]" class="waterfall-item__image">
                  <image :src="item.image" :style="{ width: item.width + 'px' }" mode="widthFix"></image>
                </view>
                <view class="waterfall-item__ft">
                  <view class="waterfall-item__ft__title">
                    <text class="value">{{ item.title }}</text>
                  </view>
                  <view class="waterfall-item__ft__desc uv-line-2">
                    <text class="value">{{ item.desc }}</text>
                  </view>
                </view>
              </view>
            </view>
          </template>
        </uv-waterfall>
      </view>
    </view>
  </view>
</template>

<script lang="ts" setup>
import { guid } from '@/uni_modules/uv-ui-tools/libs/function/index.js';
import { ref } from 'vue';
import { onHide, onLoad, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app';

const showHeader = ref(true);
const afterHeaderOpacity = ref(1); // 不透明度
const headerPosition = ref('fixed');
const headerTop = ref(null);
const statusTop = ref(null);
const city = ref('北京');
// 轮播图片
const swiperList = ref([]);
// 分类菜单
const categoryList = [
  { id: 1, name: '办公', img: '/static/image/category/1.png' },
  { id: 2, name: '家电', img: '/static/image/category/2.png' },
  { id: 3, name: '服饰', img: '/static/image/category/3.png' },
  { id: 4, name: '日用', img: '/static/image/category/4.png' },
  { id: 5, name: '蔬果', img: '/static/image/category/5.png' },
  { id: 6, name: '运动', img: '/static/image/category/6.png' },
  { id: 7, name: '书籍', img: '/static/image/category/7.png' },
  { id: 8, name: '文具', img: '/static/image/category/8.png' }
];

const list = ref([]); // 瀑布流全部数据
const list1 = ref([]); // 瀑布流第一列数据
const list2 = ref([]); // 瀑布流第二列数据
const leftGap = ref(10);
const rightGap = ref(10);
const columnGap = ref(10);

// 下拉刷新，需要自己在page.json文件中配置开启页面下拉刷新 "enablePullDownRefresh": true
onPullDownRefresh(() => {
  setTimeout(function () {
    uni.stopPullDownRefresh();
  }, 1000);
});

const waterfall = ref(null);

// 页面关闭的时候
onHide(() => {
  waterfall.value.clear();
});

// 上拉加载，需要自己在page.json文件中配置"onReachBottomDistance"
onReachBottom(() => {
  console.log(12312);
  uni.showToast({ title: '触发上拉加载' });
});

onLoad(async () => {
  const { data } = await getData();
  list.value = data;
});

const imageStyle = (item) => {
  const v = uni.upx2px(750) - leftGap.value - rightGap.value - columnGap.value;
  const w = v / 2;
  const rate = w / item.w;
  const h = rate * item.h;
  return {
    width: w + 'px',
    height: h + 'px'
  };
};

// 消息列表
const toMsg = () => {
  uni.navigateTo({
    url: '../../msg/msg'
  });
};
// 搜索跳转
const toSearch = () => {
  uni.showToast({ title: '建议跳转到新页面做搜索功能' });
};
// 分类跳转
const toCategory = (e) => {
  uni.setStorageSync('catName', e.name);
  uni.navigateTo({
    url: '/pages/goods/goods-list/goods-list?cid=' + e.id + '&name=' + e.name
  });
};

// 商品跳转
const toGoods = (e) => {
  uni.navigateTo({
    url: '/pages/goods/goods'
  });
};
// 这点非常重要：e.name在这里返回是list1或list2，要手动将数据追加到相应列
const changeList = (e) => {
  console.log(e);
  if (e.name === 'list1') {
    list1.value.push(e.value);
  } else {
    list2.value.push(e.value);
  }
};
// 模拟的后端数据
const getData = () => {
  return new Promise((resolve) => {
    const imgs = [
      { url: 'https://via.placeholder.com/100x110.png/3c9cff/fff', width: 100, height: 110 },
      { url: 'https://via.placeholder.com/200x220.png/f9ae3d/fff', width: 200, height: 220 },
      { url: 'https://via.placeholder.com/300x340.png/5ac725/fff', width: 300, height: 340 },
      { url: 'https://via.placeholder.com/400x400.png/f56c6c/fff', width: 400, height: 400 },
      { url: 'https://via.placeholder.com/500x510.png/909399/fff', width: 500, height: 510 },
      { url: 'https://via.placeholder.com/600x606.png/3c9cff/fff', width: 600, height: 606 },
      { url: 'https://via.placeholder.com/310x422.png/f1a532/fff', width: 310, height: 422 },
      { url: 'https://via.placeholder.com/320x430.png/3c9cff/fff', width: 320, height: 430 },
      { url: 'https://via.placeholder.com/330x424.png/f9ae3d/fff', width: 330, height: 424 },
      { url: 'https://via.placeholder.com/340x435.png/5ac725/fff', width: 340, height: 435 },
      { url: 'https://via.placeholder.com/350x440.png/f56c6c/fff', width: 350, height: 440 },
      { url: 'https://via.placeholder.com/380x470.png/909399/fff', width: 380, height: 470 }
    ];
    const list = [];
    const doFn = (i) => {
      const randomIndex = Math.floor(Math.random() * 10);
      return {
        id: guid(),
        allowEdit: i === 0,
        image: imgs[randomIndex].url,
        w: imgs[randomIndex].width,
        h: imgs[randomIndex].height,
        title: i % 2 === 0 ? `(${list.length + i + 1})体验uv-ui框架` : `(${list.length + i + 1})uv-ui支持多平台`,
        desc:
          i % 2 === 0
            ? `(${list.length + i + 1})欢迎使用uv-ui，uni-app生态专用的UI框架`
            : `(${list.length + i})开发者编写一套代码， 可发布到iOS、Android、H5、以及各种小程序`
      };
    };
    // 模拟异步
    setTimeout(() => {
      for (let i = 0; i < 20; i++) {
        list.push(doFn(i));
      }
      resolve({ data: list });
    }, 200);
  });
};
</script>

<style lang="scss">
$show-lines: 1;
@import '@/uni_modules/uv-ui-tools/libs/css/variable.scss';
page {
  position: relative;
  background-color: #fff;
}

@font-face {
  font-family: 'HMfont-home';
  src: url('data:application/x-font-woff2;charset=utf-8;base64,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')
    format('woff2');
}

.pullDown-effects {
  position: fixed;
  //top: calc(100upx - 36vw);
  top: 0;
  z-index: 9;
  width: 100%;
  height: 36vw;
  /*  #ifdef  APP-PLUS  */
  padding-top: var(--status-bar-height);
  /*  #endif  */
  image {
    width: 100%;
    height: 36vw;
  }
}

.status {
  width: 100%;
  height: 0;
  position: fixed;
  z-index: 10;
  background-color: #fff;
  top: 0;
  /*  #ifdef  APP-PLUS  */
  height: var(--status-bar-height); //覆盖样式
  /*  #endif  */
}

.header {
  width: 100%;
  padding: 0 4%;
  height: 100upx;
  display: flex;
  align-items: center;
  position: fixed;
  top: 0;
  z-index: 10;
  background-color: #fff;

  /*  #ifdef  APP-PLUS  */
  top: var(--status-bar-height);
  /*  #endif  */

  .addr {
    width: 120upx;
    height: 60upx;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    font-size: 28upx;

    .icon {
      height: 60upx;
      margin-right: 5upx;
      display: flex;
      align-items: center;
      font-size: 42upx;
      color: #ffc50a;
    }
  }

  .input-box {
    width: 100%;
    height: 60upx;
    background-color: #f5f5f5;
    border-radius: 30upx;
    position: relative;
    display: flex;
    align-items: center;

    .icon {
      display: flex;
      align-items: center;
      position: absolute;
      top: 0;
      right: 0;
      width: 60upx;
      height: 60upx;
      font-size: 34upx;
      color: #c0c0c0;
    }

    input {
      padding-left: 28upx;
      height: 28upx;
      font-size: 28upx;
    }
  }

  .icon-btn {
    width: 120upx;
    height: 60upx;
    flex-shrink: 0;
    display: flex;

    .icon {
      width: 60upx;
      height: 60upx;
      display: flex;
      justify-content: flex-end;
      align-items: center;
      font-size: 42upx;
    }
  }
}

.place {
  background-color: #ffffff;
  height: 100upx;
  /*  #ifdef  APP-PLUS  */
  margin-top: var(--status-bar-height);
  /*  #endif  */
}

.swiper {
  width: 100%;
  margin-top: 10upx;
  display: flex;
  justify-content: center;

  .swiper-box {
    width: 92%;
    height: 30.7vw;

    overflow: hidden;
    border-radius: 15upx;
    box-shadow: 0upx 8upx 25upx rgba(0, 0, 0, 0.2);
    //兼容ios，微信小程序
    position: relative;
    z-index: 1;

    swiper {
      width: 100%;
      height: 30.7vw;

      swiper-item {
        image {
          width: 100%;
          height: 30.7vw;
        }
      }
    }

    .indicator {
      position: absolute;
      bottom: 20upx;
      left: 20upx;
      background-color: rgba(255, 255, 255, 0.4);
      width: 150upx;
      height: 5upx;
      border-radius: 3upx;
      overflow: hidden;
      display: flex;

      .dots {
        width: 0upx;
        background-color: rgba(255, 255, 255, 1);
        transition: all 0.3s ease-out;

        &.on {
          width: calc(100% / 3);
        }
      }
    }
  }
}

.category-list {
  width: 100%;
  margin: 0 4%;
  padding: 0 0 30upx 0;
  border-bottom: solid 2upx #f6f6f6;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;

  .category {
    width: 25%;
    margin-top: 50upx;
    display: flex;
    flex-wrap: wrap;

    .img {
      width: 100%;
      display: flex;
      justify-content: center;

      image {
        width: 9vw;
        height: 9vw;
      }
    }

    .text {
      margin-top: 16upx;
      width: 100%;
      display: flex;
      justify-content: center;
      font-size: 24upx;
      color: #3c3c3c;
    }
  }
}

.banner {
  width: 92%;
  margin: 40upx 4%;

  image {
    width: 100%;
    height: 20vw;
    border-radius: 10vw;
    box-shadow: 0upx 5upx 25upx rgba(0, 0, 0, 0.3);
  }
}

.promotion {
  width: 92%;
  margin: 0 4%;

  .text {
    width: 100%;
    height: 60upx;
    font-size: 34upx;
    font-weight: 600;
    margin-top: -10upx;
  }

  .list {
    width: 100%;
    display: flex;
    justify-content: space-between;

    .column {
      width: 43%;
      padding: 15upx 3%;
      background-color: #ebf9f9;
      border-radius: 10upx;
      overflow: hidden;
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;

      .top {
        width: 100%;
        height: 40upx;
        display: flex;
        align-items: center;
        margin-bottom: 5upx;

        .title {
          font-size: 30upx;
        }

        .countdown {
          margin-left: 20upx;
          display: flex;
          height: 40upx;
          display: flex;
          align-items: center;
          font-size: 20upx;

          view {
            height: 30upx;
            background-color: #f06c7a;
            display: flex;
            justify-content: center;
            align-items: center;
            color: #fff;
            border-radius: 4upx;
            margin: 0 4upx;
            padding: 0 2upx;
          }
        }
      }

      .left {
        width: 50%;
        height: 18.86vw;
        display: flex;
        flex-wrap: wrap;
        align-content: space-between;

        .ad {
          margin-top: 5upx;
          width: 100%;
          font-size: 22upx;
          color: #acb0b0;
        }

        .into {
          width: 100%;
          font-size: 24upx;
          color: #aaa;
          margin-bottom: 5upx;
        }
      }

      .right {
        width: 18.86vw;
        height: 18.86vw;

        image {
          width: 18.86vw;
          height: 18.86vw;
        }
      }
    }
  }
}

.goods-list {
  .title {
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 80upx;
    color: #f47825;
    font-size: 30upx;
    margin-top: 10upx;

    image {
      width: 30upx;
      height: 30upx;
    }
  }

  .waterfall {
    .waterfall-item {
      overflow: hidden;
      margin-top: 10px;
      border-radius: 6rpx;
      background-color: #fff;
      box-shadow: 0 5upx 25upx rgba(0, 0, 0, 0.1);

      .waterfall-item__ft {
        padding: 20rpx;
        background: #fff;

        &__title {
          margin-bottom: 10rpx;
          line-height: 48rpx;
          font-weight: 700;

          .value {
            font-size: 32rpx;
            color: #303133;
          }
        }

        &__desc .value {
          font-size: 28rpx;
          color: #606266;
        }

        &__btn {
          padding: 10px 0;
        }
      }
    }
  }
}
</style>
